package vip.xiaonuo.dev.modular.wechat.service;

import cn.hutool.json.JSONObject;
import vip.xiaonuo.dev.modular.wechat.param.DevWechatParam;
import vip.xiaonuo.dev.modular.wechat.param.WechatCalendarParam;
import vip.xiaonuo.dev.modular.wechat.param.WechatConfigParam;
import vip.xiaonuo.dev.modular.wechat.param.wechatReq.WechatMemberCallbackParam;
import vip.xiaonuo.dev.modular.wechat.param.wechatReq.WechatMessageParam;
import vip.xiaonuo.dev.modular.wechat.param.wechatRes.WechatDepartmentRes;
import vip.xiaonuo.dev.modular.wechat.param.wechatRes.WechatUserRes;
import vip.xiaonuo.dev.modular.wechat.util.ase.WXBizMsgCrypt;

import java.io.IOException;
import java.util.List;

public interface DevWechatService {
    /**
     * 发送消息企业微信
     * @param devWechatParam
     */
    void sendMsg(WechatMessageParam devWechatParam);

    /**
     * 同步企业微信成员信息
     */
    void syncWechatMember() throws IOException;

    /**
     * 成员及通信录回调
     */
    void callBackWechatMemberOrDepartment(WechatMemberCallbackParam wechatMemberCallbackParam) throws IOException;

    /**
     * 创建企业微信标签
     */
    void createTag(String tagName, String tagId);

    /**
     * 企业微信回调参数验证
     * @return
     */
    String verifySign(String sVerifyMsgSig, String sVerifyTimeStamp, String sVerifyNonce, String sVerifyEchoStr);

    /**
     * 企业微信消息的解密
     * @return
     */
    String deCodeSign(String sReqMsgSig, Integer sReqTimeStamp, String sReqNonce, String sReqData);

    /**
     * 企业微信消息的加密
     * @return
     */
    String enCodeSign(String sRespData, Integer sReqTimeStamp, String sReqNonce);

    /**
     * 获取前端js配置信息
     * @param url
     * @return
     */
    WechatConfigParam getWechatJSConfig(String url);

    /**
     * 获取加密客户端
     */
    WXBizMsgCrypt getCodeClient();

    /**
     * 根据code获取用户ID
     * @param code
     * @return
     */
    JSONObject getUserId(String code);

    /**
     * 根据手机号获取用户ID
     * @param phone
     * @return
     */
    String getUserIdByPhone(String phone);

    /**
     * 获取子部门Id列表
     * @return
     */
    WechatDepartmentRes getDepartmentIdList(String orgId, String departmentId);

    /**
     * 获取部门员工信息
     * @param departmentId
     * @return
     */
    List<String> getMemberInfo(String departmentId);

    /**
     * 根据重点工作创建任务提醒
     * @param wechatCalendarParam
     * @return
     */
    String createCalender(WechatCalendarParam wechatCalendarParam);

    /**
     * 根据重点工作创建任务提醒
     * @param wechatCalendarParam
     * @return
     */
    String createSchedule(WechatCalendarParam wechatCalendarParam);

}
